package day22;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//测试可定长线程池
public class Demo2 {
    public static void main(String[] args) {
//        ExecutorService es= Executors.newFixedThreadPool(3);
//        for (int i=0;i<10;i++){
//            es.execute(()->{
//                String name=Thread.currentThread().getName();
//                System.out.println(name);
//                try {
//                    Thread.sleep(2000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            });
//        }
//        es.shutdown();
        //案例：有一个餐厅，需要做5盘菜，一个只有三个灶台（一次性只能做3盘菜）
        //每盘菜生产时间也不同，最后统计一下5盘菜一共花了多少时间
        ExecutorService es= Executors.newFixedThreadPool(3);
        //定义菜单集合
        List<Food> list=new ArrayList<>();
        list.add(new Food("红烧肉",6000));
        list.add(new Food("西红柿炒鸡蛋",2000));
        list.add(new Food("麻婆豆腐",3000));
        list.add(new Food("小龙虾",5000));
        list.add(new Food("肉末茄子",5000));
        //统计开始的时间
        long start=System.currentTimeMillis();
        for (int i=0;i<list.size();i++){
            int index = i;
            es.execute(()->{
                Food f= list.get(index);
                System.out.println("开始制作:"+f.name);
                try {
                    Thread.sleep(f.time);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("已经做好:"+f.name);
            });
        }
        es.shutdown();
        while (!es.isTerminated()){};
        long end=System.currentTimeMillis();
        System.out.println("制作了5盘菜，一共花费了:"+(end-start)+"ms");
    }
}

class Food{
    String name; //菜名
    long time; //制作时间

    public Food(String name, long time) {
        this.name = name;
        this.time = time;
    }
}